<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
lang="utf-8" xml:lang="utf-8">
<head>
<title>Overview</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<meta name="generator" content="Org-mode"/>
<meta name="generated" content="2009-12-13 14:45:52 "/>
<meta name="author" content="Zhuang Zhong"/>
<meta name="description" content=""/>
<meta name="keywords" content=""/>
<link rel="stylesheet" href="style/base.css"  type="text/css" />
<script type="text/javascript">
<!--/*--><![CDATA[/*><!--*/
 function CodeHighlightOn(elem, id)
 {
   var target = document.getElementById(id);
   if(null != target) {
     elem.cacheClassElem = elem.className;
     elem.cacheClassTarget = target.className;
     target.className = "code-highlighted";
     elem.className   = "code-highlighted";
   }
 }
 function CodeHighlightOff(elem, id)
 {
   var target = document.getElementById(id);
   if(elem.cacheClassElem)
     elem.className = elem.cacheClassElem;
   if(elem.cacheClassTarget)
     target.className = elem.cacheClassTarget;
 }
/*]]>*///-->
</script>
</head>
<body>
<div id="content">

<center>
<h2>Compiler: Learning by Doing</h2>
</center>

<p>
This compiler course teaches the compiler
theory and engineering. You will study, in detail, lexical
analysis, parsing, abstract syntax tree construction, type
checking, memory layout, intermediate representation, code
genenation, optimization, and garbage collection etc.. Most importantly, you 
will study the interactions 
between theory and practice, and how to manage the complexity 
introduced by the interactions. 

<p>
This course is organized in three parts: lectures, paper
readings, and labs. The
lectures cover basic topics and familiarize you with the main
concepts, and the paper readings familiarize you with the latest
research progress in current literatures. 
The lab forces you to understand the concepts at a deep 
level, since you will build a compiler from the ground up. After
the lab you will understand the internals of a rather
complex compiler and the compilation in general. 

<p>
The compiler you will build, called cc, this compiler at first
compiles a subset of the C programming language, but in later
part of this course, this compiler will also compiles some features
of object-oriented languages, as those found in C++. The major 
parts of cc compiler are: 
<ul>
<li>Lexer
<li>Parser
<li>Type checker
<li>Code generators
<li>Optimizer
<li>Garbage collector
<li>Runtime and library
</ul>

<p>
We will provide skeleton code for each lab, but you will 
have to do all the hard work. You'll have design freedom for 
the details of the concrete data structures and algorithms. 

<p>
At the end of the lab you will be able to find your way 
around the source code of most compilers, and more generally, be 
comfortable with compiler software. You will understand many 
compiler concepts in detail and will be able to use 
them in other environments. You will also understand the 
C programming language, the x86 ISA, and the SML well. 






<div id="postamble">
</div>
</div>
</body>
</html>
